package site.codeyin.javautils.controller.excel;

import com.alibaba.excel.EasyExcel;

import javax.servlet.http.HttpServletResponse;
import java.io.IOException;
import java.net.URLEncoder;
import java.util.List;

/**
 * @author <a href="https://github.com/liangcheng2221">yinjie</a>
 * @date 2024-09-07 9:32
 */
public class ExcelUtils {
    /**
     * @param response  web相应对象
     * @param tClass    类对象
     * @param list      对象列表
     * @param sheetName Excel的Sheet名字
     * @param fileName  Excel的文件名称
     */
    public static <T> void writeWebResponseExcel(HttpServletResponse response, Class<T> tClass, List<T> list, String sheetName, String fileName) throws IOException {
        // 这里注意 使用swagger 会导致各种问题，请直接用浏览器或者用postman
        response.setContentType("application/vnd.openxmlformats-officedocument.spreadsheetml.sheet");
        response.setCharacterEncoding("utf-8");
        // 这里URLEncoder.encode可以防止中文乱码 当然和easyexcel没有关系
        fileName = URLEncoder.encode(fileName, "UTF-8").replaceAll("\\+", "%20");
        response.setHeader("Content-disposition", "attachment;filename*=utf-8''" + fileName + ".xlsx");
        EasyExcel.write(response.getOutputStream(), tClass)
                .sheet(sheetName)
                .doWrite(list);
    }
    /**
     * @param response  web相应对象
     * @param tClass    类对象
     * @param list      对象列表
     * @param fileName  Excel的文件名称
     */
    public static <T> void writeWebResponseExcel(HttpServletResponse response, Class<T> tClass, List<T> list, String fileName) throws IOException {
        writeWebResponseExcel(response,tClass,list,"sheet1",fileName);
    }
}
